/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.business.router.facade.order.withdraw.detail;

import info.peigen.hotpot.common.core.domain.order.Order;
import info.peigen.hotpot.common.core.enums.BankCode;
import info.peigen.hotpot.common.core.enums.CardAccountType;
import info.peigen.hotpot.common.core.enums.CertType;
import info.peigen.hotpot.common.core.lang.money.Money;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

import java.util.List;

/**
 * <b>(WithdrawDetail)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2021/9/10
 */
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class WithdrawDetail {
    /** 代发明细流水号,同一合作伙伴号下唯一 */
    @NotEmpty
    @Max(40)
    String detailNo;
    /** 金额 */
    @NotNull
    Money  amount;
    /** 收款银行代码或名称 */
    BankCode bankCode;
    /** 卡账户类型 */
    @NotNull
    CardAccountType accountType;
    /** 账号 */
    @NotEmpty
    @Max(40)
    String          accountNo;
    /** 户名 */
    @NotEmpty
    String          accountName;
    /** 账户安全ID */
    @NotEmpty
    String          accountSecurityId;
    /** 证件类型 */
    CertType certType;
    /** 证件号码 */
    String   certNo;
    /** 省份 */
    String   province;
    /** 地区 */
    String   area;
    /** 支行名 */
    String   branchName;
    /** 联行号 */
    String   cnapsCode;
    /** 用途 */
    String   purpose;
    /** 订单列表 */
    @NotEmpty
    List<Order> orders;
    /** 到账时效 */
    String   efficiency;
    /** 备注 */
    String   memo;
    /** 汇付要求申报时以法人信息进行申报-法人证件类型 */
    CertType legalPersonCertType;
    /** 汇付要求申报时以法人信息进行申报-法人证件号 */
    String   legalPersonCertNo;
    /** 汇付要求申报时以法人信息进行申报-法人账户名 */
    String   legalPersonAccountName;
    /** 汇付要求申报时以法人信息进行申报-法人账户号 */
    String   legalPersonAccountNo;
}